﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BAL;
using DAL.Entities;
using System.Text.RegularExpressions;

namespace GrouponDesktop.AbmProveedor
{
    public partial class CambiarACliente : Form
    {
        private int IdProveedor { set; get; }
        private ClienteEntity clienteInfo;

        private List<CiudadEntity> listado = new List<CiudadEntity>();

        public CambiarACliente(int id)
        {
            IdProveedor = id;
            InitializeComponent();
            
            //Obtenemos las ciudades
            CiudadBAL proxy = new CiudadBAL();
            listado = proxy.GetCiudades();

            List<CiudadEntity> listCiu = new List<CiudadEntity>();

            

            this.SuspendLayout();

            int topPosition = 0;
            //Agregamos todos los checkbox
            foreach (CiudadEntity item in listado)
            {
                CheckBox checkBox = new CheckBox();

                checkBox.Top = topPosition;
                checkBox.Left = 10;
                checkBox.Text = item.IntIdCiudad + " " + item.VarNombre;
                checkBox.Width = 200;

                topPosition += 25;
                
                this.panel1.Controls.Add(checkBox);
            }


            this.ResumeLayout();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (ValidateForm())
            {
                ProveedorBAL proxy = new ProveedorBAL();
                CiudadBAL proxyCiu = new CiudadBAL();

                //TODO: VERIFICAR LOS DATOS DE TELEFONO CODIGO PSOTAL Y DNI
                ClienteEntity client = new ClienteEntity();
                client.VarNombre = txtNomre.Text;
                client.VarApellido = txtApellido.Text;
                client.IntCodigoPostal = (txtCodigoPostal.Text != string.Empty) ? Int32.Parse(txtCodigoPostal.Text) : 0;
                client.DatFecha_Nac = txtDateBirth.Value;
                client.VarDireccion = txtDireccion.Text;
                //client.BigDNI = long.Parse(txtDNI.Text);
                client.VarMail = txtMail.Text;
                client.BigTelefono = long.Parse(txtTelefono.Text);
                if(cboIsDeleted.SelectedItem == "Si"){
                    client.BitIsDeleted = true;
                }else{
                    client.BitIsDeleted = false;
                }

                ProveedorEntity prov = new ProveedorEntity();
                prov.IntIdProveedor = IdProveedor;
                client.BigDNI = (txtDNI.Text != string.Empty) ? long.Parse(txtDNI.Text) : 0;
                client = proxy.CambiarProveedorACliente(prov,client);
                proxyCiu.DeleteCiudadesFromCliente(client);
                //Agregamos las funcionaldiades
                foreach (CheckBox item in panel1.Controls)
                {
                    if (item.Checked == true)
                    {
                        CiudadEntity ciu = new CiudadEntity();
                        string[] parts = item.Text.Split(' ');
                        ciu.IntIdCiudad = Int32.Parse(parts[0]);
                        proxyCiu.AddCiudadToCliente(ciu, client);
                    }
                }

                this.Close();
            }
        }

        /// <summary>
        /// Funcion que valida si un mail esta bien escrito
        /// </summary>
        /// <param name="email"></param>
        /// <returns></returns>
        private Boolean email_bien_escrito(String email)
        {
            String expresion;
            expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
            if (Regex.IsMatch(email, expresion))
            {
                if (Regex.Replace(email, expresion, String.Empty).Length == 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }

        public bool ValidateForm() {
            bool res = true;
            string errores = string.Empty;


            //Validamos el DNI solo si es un agregar cliente
            if (txtDNI.Text != string.Empty)
            {
                try
                {
                    long algo = long.Parse(txtTelefono.Text);
                

                    //Nos fijamos si existe el id
                    ClienteEntity _cliente = new ClienteEntity();
                    ClienteBAL dal = new ClienteBAL();

                    _cliente.BigDNI = (txtDNI.Text != string.Empty) ? long.Parse(txtDNI.Text.ToString()) : 0;
                    //if (clienteInfo.BigDNI != _cliente.BigDNI)
                    //{

                        _cliente = dal.GetClientesByDNI(_cliente);
                        if (_cliente != null && _cliente.IntIdCliente != 0)
                        {
                            errores += "El DNI ya esta registrado\n";
                            res = false;
                        }
                    }
                catch (FormatException ex)
                {
                    errores += "El DNI no tiene un formato valido\n";
                    res = false;
                }
                catch (OverflowException ex)
                {
                    errores += "El DNI no tiene un formato valido\n";
                    res = false;
                }
                //}
            }
            else {
                errores += "El DNI es obligatorio\n";
                res = false;
            }
            if(txtApellido.Text == string.Empty){
                errores += "El Apellido es obligatorio\n";
                res = false;
            }
            if (txtCodigoPostal.Text == string.Empty)
            {
                errores += "El Codigo Postal es obligatorio\n";
                res = false;
            }
            else {
                try {
                    int algo = Int32.Parse(txtCodigoPostal.Text);
                }catch(FormatException ex){
                    errores += "El Codigo Postal no tiene un formato valido\n";
                    res = false;
                }
                catch (OverflowException ex)
                {
                    errores += "El Codigo Postal es muy grande\n";
                    res = false;
                }
            
            }
            if (txtDireccion.Text == string.Empty)
            {
                errores += "La direccion es obligatorio\n";
                res = false;
            }
            if (txtMail.Text == string.Empty)
            {
                errores += "El email es obligatorio\n";
                res = false;
            }
            else { 
                //Validamos el mail
                if (!email_bien_escrito(txtMail.Text))
                {
                    errores += "El email no es valido\n";
                    res = false;
                }
            }
            if (txtTelefono.Text == string.Empty)
            {
                errores += "El telefono es obligatorio\n";
                res = false;
            }
            else {
                try
                {
                    long algo = long.Parse(txtTelefono.Text);
                }
                catch (FormatException ex)
                {
                    errores += "El Telefono no tiene un formato valido\n";
                    res = false;
                }
                catch (OverflowException ex)
                {
                    errores += "El Telefono no tiene un formato valido\n";
                    res = false;
                }
            }


            if (txtNomre.Text == string.Empty)
            {
                errores += "El nombre es obligatorio\n";
                res = false;
            }

            if (cboIsDeleted.SelectedItem == null || cboIsDeleted.SelectedItem.ToString() == string.Empty)
            {
                errores += "Debe elegir un valor para el campo deshabilitado\n";
                res = false;
            }
            if (errores != string.Empty)
            {
                MessageBox.Show(errores, "Hubo Errores");
            }
            return res;
        }

    }
}
